package com.example.everying.framework.ai.deepseek.service;

import com.alibaba.dashscope.aigc.generation.Generation;
import com.alibaba.dashscope.aigc.generation.GenerationParam;
import com.alibaba.dashscope.aigc.generation.GenerationResult;
import com.alibaba.dashscope.common.Message;
import com.alibaba.dashscope.common.Role;
import com.example.everying.framework.ai.deepseek.domain.DeepSeekRequestDto;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.util.Collections;


@Slf4j
@Service
public class AliBaiLianService {

    private static final String model = "deepseek-v3";
    private static final String apiKey = "sk-bb20eef9bf9d4b30bd6b0f6353fab53c";
    private final Generation gen = new Generation();
    private volatile boolean initialized = false;

//    @PostConstruct
//    public void init() {
//        if (initialized) {
//            return;
//        }
//
//        log.debug(" 开始预热DashScope连接池...");
//        initialized = true;
//
//        try {
//            Message msg = Message.builder()
//                    .role(Role.USER.getValue())
//                    .content("ping")
//                    .build();
//
//            // 添加超时控制
//            gen.streamCall(buildGenerationParam(msg))
//                    .timeout(10, TimeUnit.SECONDS)  // 10秒超时
//                    .subscribe(
//                            r -> log.debug(" 预热连接成功"),
//                            e -> log.warn(" 预热连接失败: {}", e.getMessage())
//                    );
//        } catch (Exception e) {
//            log.error(" 初始化DashScope连接失败", e);
//        }
//    }

    /**
     * 调用AI服务并返回完整响应
     */
    public String getAiResponse(DeepSeekRequestDto dto) {
        long startTime = System.currentTimeMillis();
        log.info(" 开始调用DeepSeek API，内容: {}", dto.getContent());

        try {
            String userMessage = buildPrompt(dto.getContent());
            Message userMsg = Message.builder()
                    .role(Role.USER.getValue())
                    .content(userMessage)
                    .build();

            // 使用非流式调用
            GenerationResult result = gen.call(buildGenerationParam(userMsg));
            String content = result.getOutput().getChoices().get(0).getMessage().getContent();

            long costTime = System.currentTimeMillis()  - startTime;
            log.info("DeepSeek  API调用成功，耗时: {}ms", costTime);
            log.debug(" 响应内容: {}", content);

            return content;
        } catch (Exception e) {
            long costTime = System.currentTimeMillis()  - startTime;
            log.error("DeepSeek  API调用失败，耗时: {}ms", costTime, e);
            return "{\"error\":\"AI服务暂时不可用\"}";
        }
    }

//    /**
//     * 构建提示词
//     */
//    private static String buildPrompt(String content) {
//        return String.format(
//                "为以下文本生成一个20字以内的标题，要求简短有力，必须包含关键信息（如时间、地点、事件等），仅输出标题内容：%s",
//                content
//        );
//    }
//
    /**
     * 构建提示词
     */
    private static String buildPrompt(String content) {
//        return String.format(
//                "为下面一段内容提取一下关键需求，用于生成标签，只给出标签组合，其他多余内容无需输出，格式为#标签1 #标签2，数量限制为不超过5个  内容：%s",
//                content
//        );
        return String.format(
                "我现在有一款小程序，在我发布内容时，你需要根据我的内容生成标签，此标签只存储于后台，不做任何展示，为推荐算法提供标签匹配数据，只需生成有相关性的标签，其他多余内容无需输出，只输出五个即可，格式为#标签1#标签2  内容：%s",
                content
        );
    }

    /**
     * 构建调用参数
     */
    private GenerationParam buildGenerationParam(Message userMsg) {
        return GenerationParam.builder()
                .apiKey(apiKey)
                .model(model)
                .maxTokens(100)
                .topP(0.8)
                .temperature(0.3F)
                .topK(50)
                .messages(Collections.singletonList(userMsg))
                .resultFormat(GenerationParam.ResultFormat.TEXT)
                .incrementalOutput(false)
                .build();
    }

    public static void main(String[] args) {
        AliBaiLianService service = new AliBaiLianService();
        String content = "\uD83D\uDD25 全球首个新疆文化沉浸式数字大展《精绝奇遇》 \uD83D\uDCCD 坐标雄安！7月12日本周六重磅启幕！ ✨ 为什么必看？ ✅ 黑科技沉浸体验：穿越式VR考古、AIGC体感交互、数字绿洲秘境，亲手“挖掘”沙海文物，触摸精绝女王的神秘世界！ ✅ 数字大展开幕盛典，打卡限定历史时刻，这波记忆必须珍藏！ ✅ 新疆风情演艺：新疆和田文工团献演\uD83D\uDC83一秒穿越西域！ ✅文化沙龙：深度解读尼雅遗址×新疆丝路文化，链接河北-新疆千年文明！ \uD83D\uDC7B展览玩什么？ ➊ 沙海寻宝：化身探险家，用手电筒发掘沙漠珍宝⚱\uFE0F ➋ 精绝织梦：穿梭精绝幻境，体验神秘空间\uD83D\uDCAB ➌ 秘宝奇境：AI复活文物欣赏+创意涂鸦沙漠生物\uD83E\uDD8E ➍ 精绝市集：穿越VR古城市集，亲临尼雅遗址！\uD83D\uDC2B \uD83D\uDCA1 彩蛋：新疆博物馆官方周边店+研学手作工坊，把“精绝文创”带回家！ ⌚\uFE0F2025.7.12-10.12，10:00-21:00 （20:00停止入场，除法定节假日之外，周一闭馆） \uD83E\uDEC6雄安商务服务中心寻环XLOOP B1层 \uD83D\uDC48戳官方渠道速抢票，做朋友圈第一波打卡人！";
        DeepSeekRequestDto dto = new DeepSeekRequestDto();
        dto.setContent(content);
        System.out.println(service.getAiResponse(dto));
    }
}